const express = require('express'); // 引入 Express 框架
const Core = require('@alicloud/pop-core'); // 引入阿里云 SDK
const jwt = require('jsonwebtoken');
const { residentModel } = require('../model/model');
const router = express.Router()
// 解析请求中的 JSON 数据

// 生成 Access Token
function generateAccessToken(value) {
    return jwt.sign({ value }, process.env.ACCESS_TOKEN_SECRET, { expiresIn: '10s' });
}

// 生成 Refresh Token
function generateRefreshToken(value) {
    return jwt.sign({ value }, process.env.REFRESH_TOKEN_SECRET);
}

const client = new Core({ // 创建 Client 对象
    accessKeyId: 'LTAI5tCqUzop2JHoGYmnV6ik', // 替换成自己的 AccessKey ID
    accessKeySecret: '7JXL8LN9KBRemi44ETmXO4x86ogFNI', // 替换成自己的 AccessKey Secret
    endpoint: 'https://dysmsapi.aliyuncs.com', // API 访问入口，根据实际情况修改
    apiVersion: '2017-05-25' // API 版本号，根据实际情况修改
});

// 生成随机验证码
function generateCode() {
    const code = Math.floor(Math.random() * (9999 - 1000 + 1)) + 1000;
    return code.toString();
}

// 发送短信验证码
router.post('/sendCode', async (req, res) => {
    const phoneNumber = req.body.phoneNumber; // 获取手机号码

    let resident = await residentModel.findOne({ phoneNumber: phoneNumber })

    if (!resident) {
        res.send({
            message: '该用户不存在',
            flag: false,
        })
        return
    }

    const code = generateCode(); // 生成验证码
    const params = {
        "RegionId": "cn-hangzhou", // 短信服务所在区域，可以参考阿里云文档
        "PhoneNumbers": phoneNumber, // 目标手机号码
        "SignName": "智慧社区2401A", // 短信签名名称，需先在阿里云控制台中申请审核通过
        "TemplateCode": "SMS_474925925", // 短信模板 CODE，需先在阿里云控制台中申请审核通过
        "TemplateParam": JSON.stringify({ // 短信模板参数，为 JSON 字符串格式
            "code": code // 模板中的变量名和对应的值
        })
    };

    const requestOption = { // 设置请求超时时间等选项
        method: 'POST',
        timeout: 5000
    };
    // 调用 SendSms 方法发送短信
    client.request('SendSms', params, requestOption).then(async (result) => {
        console.log(result); // 打印发送结果
        const accessToken = generateAccessToken(code);
        const refreshToken = generateRefreshToken(code);
        res.status(200).json({ // 返回状态码和生成的验证码
            message: '验证码已发送，请注意查收！',
            flag: true,
            code: code,
            accessToken,
            refreshToken,
            id: resident._id
        });
    }, (e) => {
        console.log(e); // 打印异常信息
        res.status(500).json({ // 返回错误状态码和错误信息
            message: '短信发送失败，请稍后重试！',
            flag: false,
        });
    });
});


module.exports = router